<?php

/**
 * 查找未下载的图片
 */
class Check_saveimagesApp extends MallbaseApp
{

    /**
     * 构造函数，指定日志目录
     * Check_saveimagesApp constructor.
     */
    public function __construct()
    {
        ini_set('error_log', ROOT_PATH . '/temp/logs/SaveImages_' . date('y_m_d') . '.log');
    }


    /**
     * 查找未下载的图片
     */
    public function index()
    {
        // 开启错误提示
        ini_set('display_errors', 'On');
        error_reporting(E_ALL);

        // 设置不超时
        set_time_limit(0);

        // 所有数据库的文件列表
        $goodsModel = &m('goods');
        $goodsSpecModel = &m('goodsspec');
        $saveImagesModel = &m('save_images');

        // 规格表，取出20191022日期的，一共有5508条，其中符合条件的有862条
        $spec_datas = $goodsSpecModel->findAll([
            'fields' => 'spec_id, spec_1',
            'conditions' => "spec_1 LIKE '%2019102217%' OR spec_1 LIKE '%2019102218%'",
        ]);

        // 记录日志
        // 开始记录日志
        $message = print_r($spec_datas, true);
        error_log('规格图片符合要求的2019102217-2019102218列表为：' . $message);


        // 先查询规格表是否有图片不能访问
        foreach ($spec_datas as $data) {
            $httpCode = $this->getHeader(SITE_URL . '/' . $data['spec_1']);
            // 404代表不能访问，需要重新下载
            if ($httpCode == 404) {
                // 记录日志
                error_log('文件路径：' . SITE_URL . '/' . $data['spec_1'] . '状态码返回404，需要重新下载，该文件所属的spec_id为：' . $data['spec_id']);
                // 查找save_images表中spec_id=$data['spec_id']的，is_save重新标记为0
                if (!$result = $saveImagesModel->edit("spec_id={$data['spec_id']}", ['is_save' => '0'])) {
                    error_log($data['spec_id'] . '更改is_save=0状态失败');
                }
            }
        }

        // goods
        // description是富文本，需要单独提取出来
        // 商品表，取出20191022日期的，一共有2450条，其中符合条件的有429条
        $goods_datas = $goodsModel->findAll([
            'fields' => 'goods_id, description, default_image',
            'conditions' => "description LIKE '%2019102217%' OR default_image LIKE '%2019102217%' OR description LIKE '%2019102218%' OR default_image LIKE '%2019102218%'",
        ]);

        // 在查询goods表中的description和defaunt_image图片
        foreach ($goods_datas as $data) {
            // 查找default_image路径
            $httpCode = $this->getHeader(SITE_URL . '/' . $data['default_image']);
            // 404代表不能访问，需要重新下载
            if ($httpCode == 404) {
                // 记录日志
                error_log('文件路径：' . SITE_URL . '/' . $data['default_image'] . '状态码返回404，需要重新下载，该文件所属的goods_id为：' . $data['goods_id']);
                // 接下来把goods表中该default_image的那条记录中的description清空，需要重新下载
                $goodsModel->edit('goods_id=' . $data['goods_id'], ['description' => '']);
                // 再查找save_images表中goods=$data['goods_id']的，is_save重新标记为0
                if (!$result = $saveImagesModel->edit("goods_id={$data['goods_id']}", ['is_save' => '0'])) {
                    error_log($data['goods_id'] . '更改is_save=0状态失败');
                }
            }
        }

        // 最终结果
        echo 'Check save images successfully';
        exit();
    }

    /**
     * 获取一个远程资源的http状态码
     * @param $url
     * @return mixed
     */
    public function getHeader($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url); //设置URL
        curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header
        curl_setopt($curl, CURLOPT_NOBODY, true); //Body就不要了吧，我们只是需要Head
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //数据存到成字符串吧，别给我直接输出到屏幕了
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 忽略https证书
        curl_exec($curl); //开始执行啦～
        $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦～
        curl_close($curl); //用完记得关掉他
        return $httpcode;
    }

}